<script>
  function Person(name, age) {
    this.name = name;
    this.age = age;
    return {
      name: 'sss',
    };
  }

  //   const p = new Person('张三', 18);

  /*  ● 创建一个全新的对象obj，继承构造函数的原型：这个对象的__proto__要指向构造函数的原型prototype
● 执行构造函数，使用 call/apply 改变 this 的指向（将obj作为this）
● 返回值为object类型则作为new方法的返回值返回，否则返回上述全新对象obj */

  function Mynew(constructorFn, ...args) {
    let p = Object.create(constructorFn.prototype);
    let res = constructorFn.apply(p, args);
    return typeof res === 'object' ? res : p;
  }
  const p = Mynew(Person, '张三', 18);
  console.log('p', p);
</script>
